# all_vars.py
import builtins
import types

def all_vars():
    # 1. 当前全局作用域（模块级变量、import、自己定义的一切）
    print("=== 1. 当前模块全局命名空间 ===")
    for k, v in globals().items():
        print(f"{k:30} -> {type(v).__name__}")

    # 2. 内建命名空间（print、len、__name__、__import__、Exception...）
    print("\n=== 2. 内建命名空间 builtins ===")
    for k in dir(builtins):
        v = getattr(builtins, k)
        print(f"{k:30} -> {type(v).__name__}")

    # 3. 任意对象能点出来的全部属性/方法
    #    这里示范 str 与 list；想列出别的对象把 obj 换掉即可
    for name, obj in (('str', str), ('list', list)):
        print(f"\n=== 3. {name} 的全部属性/方法 ===")
        for attr in dir(obj):
            value = getattr(obj, attr)
            # 区分数据描述符 / 方法 / 其他
            kind = 'method' if callable(value) else 'data'
            print(f"{name}.{attr:30} ({kind})")

if __name__ == "__main__":
    all_vars()